package com.yc.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yc.entity.Attendance;
import com.yc.exception.BizException;
import com.yc.vo.AttendanceData;
import com.yc.vo.Result;
import org.apache.ibatis.annotations.Param;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.yc.entity.StudentInfo;
import com.yc.vo.StudentAttendanceRecord;
import org.apache.ibatis.annotations.Param;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 考勤表;(attendance)表服务接口
 * @date : 2023-6-28
 */
public interface AttendanceService{

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Attendance queryById(Integer id);

    /**
     * 分页查询
     *
     * @param attendance 筛选条件
     * @param current 当前页码
     * @param size  每页大小
     * @return
     */
    Page<Attendance> paginQuery(Attendance attendance, long current, long size);
    /**
     * 新增数据
     *
     * @param attendance 实例对象
     * @return 实例对象
     */
    Attendance insert(Attendance attendance);
    /**
     * 更新数据
     *
     * @param attendance 实例对象
     * @return 实例对象
     */
    Attendance update(Attendance attendance);
    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 通过考勤表Id查询上课的学生
     * @param attId 考勤表Id
     * @return
     */
    List<StudentAttendanceRecord> selectStudentByAttId( String attId);

    /**
     * 添加考勤信息
     * @param attendance 考勤信息
     */
    void addAttendance(Attendance attendance);

    /**
     * 通过课程Id查询是否有考勤记录 没有则新增 有就修改
     * @param scheduleId
     * @return 考勤记录
     */
    Integer selectAttendanceByScheduleId(String scheduleId);

    /**
     * 修改考勤信息
     * @param attendance 考勤信息
     * @return  1成功 0失败
     */
    @Transactional
    void modifyAttendance(Attendance attendance);

    /**
     * 分页 通过考勤表Id查询上课的学生
     * @param attId 考勤表Id
     * @return
     */
    Page<StudentAttendanceRecord> selectPageStudentByAttId(Page<StudentAttendanceRecord> page, String attId);

    /**
     * 上传数据
     * @param inputStream 数据流
     * @return 是否成功
     */
    int upload(InputStream inputStream,String notes,String id) ;

    /**
     * 查询学生 有考勤的年份
     * @param stuid 学生学号
     * @return 有考勤的年份
     */
    List<String> selectAllYears(String stuid);

    /**
     * 查询学生 有考勤的月份
     * @param beginDate 起始时间
     * @param endDate   截止时间
     * @return  有考勤的月份
     */
    List<String> selectAllMonths(String beginDate, String endDate);

    /**
     * 下载模板
     *
     * @param response
     * @return
     * @throws IOException
     */
    Result<?> downloadTemplate(HttpServletResponse response) throws IOException ;

    /**
     * 添加快捷考勤记录
     * @param attendanceDataList 班级集合
     * @return
     */
    Integer addQuick(List<AttendanceData> attendanceDataList) throws BizException;

    /**
     * 微信小程序，定时任务暗号考勤
     * @param finalKey 暗号
     * @param username 老师工号
     */
    void addAttendanceForWx(String finalKey, String username);

}
